package com.gaoqi.springboot_shiro.service.Impl;

import com.gaoqi.springboot_shiro.mapper.UsersMapper;
import com.gaoqi.springboot_shiro.pojo.Role;
import com.gaoqi.springboot_shiro.pojo.User;
import com.gaoqi.springboot_shiro.service.UserService;
import com.gaoqi.springboot_shiro.utils.SaltUtils;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;


@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Resource
    private UsersMapper usersMapper;

    /**
     * 用户组测 使用md5 + 随机盐+hash散列 对密码加密
     * 初始化 新用户的角色 和权限信息
     *
     * @param user
     */
    @Override
    public void register(User user) {
        System.out.println("====================注册用户 加盐 密码加密===================");
        //1.获取随机盐
        String salt = SaltUtils.getSalt(8);
//        System.out.println("*************************************************"+salt);
        //2.获取md5对象 对用户密码进行加密 参数1 用户密码 参数2 随机盐 参数3 散列值
        Md5Hash md5Hash = new Md5Hash(user.getPswd(), salt, 1024);

        //3.生成加密密码
        String newPswd = md5Hash.toHex();

        //修改user的pswd 为加密密码 和添加随机盐
        user.setPswd(newPswd);
        user.setSalt(salt);

        //4.调用mapper注册方法　实现注册
        usersMapper.register(user);
    }

    /**
     * 根据用户名获取用户信息
     *
     * @param uname
     * @return
     */
    @Override
    public User findUserByUname(String uname) {

        return usersMapper.findUserByUname(uname);
    }

    /**
     * 根据用户名查询 改用户的角色
     */
    @Override
    public User findRolesByUname(String uname) {
        return usersMapper.findRolesByUname(uname);
    }

    /**
     * 根据角色id 查询权限
     *
     * @param rid
     * @return
     */
    @Override
    public Role findPremissionById(Long rid) {
        return usersMapper.findPremissionById(rid);
    }


}
